Network nodes forward data along paths from one node to another. A path often includes multiple nodes and links. When a node receives data, such as a packet, the node determines the next-hop node on the path towards the data's destination and forwards the data to the next-hop node. This continues, with each node along the path determining the next-hop and forwarding the data along the path, until the data reaches its destination at the end of the path.
Paths are typically determined by routing protocols. For example, there may be multiple paths to forward data from a first node to a second node. A routing protocol determines what those paths are, and often identifies an optimal path from among the many possible paths. For example, link state routing protocols calculate the shortest (based on certain routing metrics) path from a given node to all other nodes in a particular topology. Link state protocols perform a shortest path first (SPF) calculation and generate an SPF tree (SPT).
Sometimes paths calculated by the routing protocol are not satisfactory for some reason. For example, a user may determine that a path includes a node to which the user does not want data forwarded. Or a user can determine that data should be forwarded to a particular node that is not on the path. A user can establish a tunnel to direct data from one specific node to another specific node, thereby causing the data to bypass nodes the user wishes to bypass and ensuring that data reaches nodes the user wants the data to reach. While tunnels can be useful, typical tunneling methods have certain limitations, such as requiring manual intervention by the user to modify established routing information.